package com.lazily.homework;


/**
 * @Author: GZQ
 * @date: 2025/4/13 12:56
 * @description: 字符串反转
 * @verson: 1.0
 */

public class Homework01 {
	// 程序入口
	public static void main(String[] args) {
		// 测试
		String str = "abcdef";
		System.out.println("=====交换前=====");
		System.out.println(str);
		// 异常处理
		try {
			str = reverse(str, 1, 4);
		} catch (Exception e) {
			System.out.println(e.getMessage());
			;
			return;
		}
		System.out.println("=====交换后=====");
		System.out.println(str);
	}

	/**
	 * (1) 将字符串中指定的部分进行反转。 比如将 “abcdef" 反转为 ”aedcbf“
	 * (2) 编写方法 public static String reverse(String str, int start, int end) 搞定
	 * 思路分析
	 * (1) 先把方法定义确定
	 * (2) 把 String 转成 char[], 因为char[] 的元素是可以交换的
	 * (3) 画出分析示意图
	 * (4) 代码实现
	 */
	public static String reverse(String str, int start, int end) {

		// 对输入的参数做一个验证
		// 重要的编程技巧!!!
		// (1) 写出正确的情况
		// (2) 然后取反
		// (3) 使用取反，使代码思路更清晰

		// 参数错误抛出一个异常
		// if (!(str != null && start >= 0 && end > start && end < str.length())) {
		// 	throw new RuntimeException("参数不正确");
		// }

		// 异常细分
		if (!(str != null)) {
			throw new RuntimeException("str is null");
		}
		if (!(start >= 0 && end > start)) {
			throw new RuntimeException("statr 不大于等于0 或 end 不大于 start");
		}
		if (!(end < str.length())) {
			throw new RuntimeException("end 大于或等于 str 的长度");
		}
		char[] chars = str.toCharArray();
		char temp = ' '; // 交换辅助变量
		for (int i = start, j = end; i < j; i++, j--) {
			temp = chars[i];
			chars[i] = chars[j];
			chars[j] = temp;
		}
		// 使用chars 重新构建一个String 返回即可
		return new String(chars);
	}

}
